﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ComunesMGI.DataTypes;

namespace MGI.Logica
{
    class CtrUsuarios:IUsuarios
    {

        #region IUsuarios Members



        public List<DataUsuario> GetUsuarios()
        {
            MgrUsuarios mgrUsuarios = MgrUsuarios.GetInstance();
            return mgrUsuarios.GetUsuarios();
        }

        public void AddUsuario(DataUsuario usuario)
        { 
            MgrUsuarios mgrUsuarios = MgrUsuarios.GetInstance();
            mgrUsuarios.AddUsuario(usuario);
        }

        public void ModificarUsuario(DataUsuario usuario)
        {
            MgrUsuarios mgrUsuarios = MgrUsuarios.GetInstance();
            mgrUsuarios.ModificarUsuario(usuario);
        }

        public void BajaUsuario(int usrCod)
        {
            MgrUsuarios mgrUsuarios = MgrUsuarios.GetInstance();
            mgrUsuarios.BajaUsuario(usrCod);
            
        }

        public List<DataSincronizarTarea> SincronizarTareas(string nomUsuario)
        {

            //Obtengo el data usuarios para obtener la ultima fecha de sincronizacion
            MgrUsuarios mgrUsuarios = MgrUsuarios.GetInstance();
            DataUsuario dataUsuario = mgrUsuarios.GetUsuario(nomUsuario);


            //obtengo todos los sistemas de todos los clientes
            MgrClientes mgrClientes = MgrClientes.GetInstance();
            List<DataCliente> clientes = mgrClientes.GetClientes();

            MgrIncidentes mgrIncidentes = MgrIncidentes.GetInstance();
            List<DataSincronizarTarea> tareasASincronizar = new List<DataSincronizarTarea>();

            MgrSistemas mgrSistemas = MgrSistemas.GetInstance();
            foreach (DataCliente cliente in clientes)
            {
                List<DataSistema> sistemasCliente = mgrSistemas.GetSistemas(cliente.Codigo);
                foreach (DataSistema sistema in sistemasCliente)
                {
                    List<DataSincronizarTarea> tareasSitio = mgrIncidentes.GetTareasAsignadasDespuesFecha(sistema.Sitio, dataUsuario.FechaSincronizacion, dataUsuario.Nombre, sistema.UrlWS);
                    foreach (DataSincronizarTarea tarea in tareasSitio)
                    {
                        tarea.NomCliente = cliente.Nombre;
                        tarea.NomSistema = sistema.Nombre;
                        tarea.IdCliente = cliente.Codigo;
                        tarea.IdSistema = sistema.Codigo;
                    }
                    tareasASincronizar.AddRange(tareasSitio);
                }
            }

            //Actualizo en la base la ultima fecha de sincornizacion para el usuario.
            dataUsuario.FechaSincronizacion = DateTime.Now;
            mgrUsuarios.ModificarUsuario(dataUsuario);

            return tareasASincronizar;
        }

        #endregion
    }
}
